﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;

namespace UsbGuard.Administration
{
    public partial class Form2 : Form
    {
        bool corpw = false; //Setzt den Boolean Wert zur Passwortüberprüfung auf False
        public Form2()
        {
            InitializeComponent();
        }


        /// <summary>
        /// Gibt einen MD5 Hash als String zurück
        /// </summary>
        /// <param name="TextToHash">string der Gehasht werden soll.</param>
        /// <returns>Hash als string.</returns>
        public static string GetMD5Hash(string TextToHash)
        {
            //Prüfen ob Daten übergeben wurden.
            if ((TextToHash == null) || (TextToHash.Length == 0))
            {
                return string.Empty;
            }

            //MD5 Hash aus dem String berechnen. Dazu muss der string in ein Byte[]
            //zerlegt werden. Danach muss das Resultat wieder zurück in ein string.
            MD5 md5 = new MD5CryptoServiceProvider();
            byte[] textToHash = Encoding.Default.GetBytes(TextToHash);
            byte[] result = md5.ComputeHash(textToHash);
            return System.BitConverter.ToString(result);
        } 

        private void button1_Click(object sender, EventArgs e)
        {
            string x = DateTime.Now.Date.ToShortDateString(); //Speichert das aktuelle Datum in den String
            string z1 = "";
            string z2 = "";
            int y = txtPass.Text.Length; //Bestimmt die Länge des Passwortes
            if (y > 10)
            {
                z1 = txtPass.Text.Substring(0, y - 10); //Zerlegt den String in 2 Teile, Stringanfang
                z2 = txtPass.Text.Substring(y - 10); //Zerlegt den String in 2 Teile, hierbei werden nur die Letzten 10 Stellen genommen
            }
            else
            {
                z1 = "";
                z2 = "";
            }

            // Verschlüsselt den String in 3xMD5 von Teil 1 + 1xMD5 von Teil2 (zur Zeit: Weide+Datum (z.B. Weide13.06.2012))
            if ((GetMD5Hash(GetMD5Hash(GetMD5Hash(z1))) + GetMD5Hash(z2)) == ("60-81-3E-2F-E1-A2-68-C4-14-B8-60-6A-60-F7-25-4C" + GetMD5Hash(x)))
            {
                corpw = true; //Setzt den Boolean Wert corpw auf true, sofern Passwort korrekt ist.
                this.DialogResult = System.Windows.Forms.DialogResult.OK;
            }
            else
            {
                MessageBox.Show("Das eingegebene Passwort ist falsch.");
                
            }
        }

        private void Form2_Load(object sender, EventArgs e)
        {
        }

        private void Form2_FormClosed(object sender, FormClosedEventArgs e)
        {
            
            this.DialogResult = (corpw) ? System.Windows.Forms.DialogResult.OK :System.Windows.Forms.DialogResult.Abort;
        }
    }
}
